﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace FTP_Test {
    class Program {
        static void Main(string[] args) {

            FTPUploadFile(@"d:\test_2.txt");

            Uri serverUri = new Uri("ftp://10.7.0.1/Test2.txt");
            WebClient request = new WebClient();
            request.Credentials = new NetworkCredential("user", "1");
            byte[] newFileData = request.DownloadData(serverUri.ToString());
            string fileString = System.Text.Encoding.GetEncoding("windows-1251").GetString(newFileData);

            File.WriteAllText("..\\..\\Test.txt", fileString);


            ////http://docstore.mik.ua/ftp_tut/com_a.htm --- ftp commands
            ////підєднуюсь до сервера
            //TcpClient client = new TcpClient();
            //client.Connect("ftp.karelia.ru", 21);
            //Stream writer = client.GetStream();

            //byte[] buffer = new byte[255];

            ////відправляю запит на сервер
            ////writer.Write(Encoding.Default.GetBytes("open ftp ftp.karelia.ru   \r\n"), 0, Encoding.Default.GetByteCount("open ftp ftp.karelia.ru   \r\n"));
            ////отримую відповідь з сервера
            ////writer.Read(buffer, 0, 255);
            ////Console.WriteLine(":: " + Encoding.Default.GetString(buffer));

            ////відправляю запит на сервер
            //writer.Write(Encoding.Default.GetBytes("dir \r\n"), 0, Encoding.Default.GetByteCount("dir \r\n"));
            ////отримую відповідь з сервера
            //writer.Read(buffer, 0, 255);
            //Console.WriteLine(":: " + Encoding.Default.GetString(buffer));

        }


        private static void FTPUploadFile(string filename) {
            FileInfo fileInf = new FileInfo(filename);
            // Создаем объект FtpWebRequest
            FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://10.7.0.1/" + fileInf.Name));
            // Учетная запись
            reqFTP.Credentials = new NetworkCredential("user", "1");
            reqFTP.KeepAlive = false; 
            // Задаем команду на закачку
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            // Тип передачи файла
            reqFTP.UseBinary = true;
            // Сообщаем серверу о размере файла
            reqFTP.ContentLength = fileInf.Length;
            // Буффер в 2 кбайт
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            // Файловый поток для чтения с диска (на нашей машине)
            FileStream fs = fileInf.OpenRead();
            try {
                //создаем поток для записи файла на сервер
                Stream strm = reqFTP.GetRequestStream();
                // Читаем из потока по 2 кбайт
                contentLen = fs.Read(buff, 0, buffLength);
                // Пока файл не кончится
                while (contentLen != 0) {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                // Закрываем потоки
                strm.Close();
                fs.Close();
            }
            catch (Exception ex) {

                Console.WriteLine(ex.Message);

            }

        }
    }
}
